﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dados.ClassesSQLServer;
using Dados.Interfaces;
using Dados.ValueObjects;
using System.ComponentModel;


namespace Negocios
{
    [DataObject]
    public class VendaPassagemBOMetodos
    {
            private IVendaPassagem iVPassagemDados;

            public VendaPassagemBOMetodos()
            {
                //Verificar em algum arquivo a configuração qual o BD
                iVPassagemDados = new VPassagemSQLServer();
            }

            [DataObjectMethodAttribute(DataObjectMethodType.Insert, true)]
            public bool Insere(VendaPassagemBO vpBO)
            {
                VPassagemVO vpVO = new VPassagemVO();
                vpVO.Id = vpBO.Id;
                vpVO.Cliente = vpBO.CBO.Cpf;
                vpVO.Preco = vpBO.Preco;
                vpVO.Companhia = vpBO.Companhia;
                vpVO.DataIda = vpBO.DataIda;
                vpVO.DataVolta = vpBO.DataVolta;
                vpVO.Classe = vpBO.Classe;
                vpVO.Usuario = vpBO.Usuario.Login;   
                vpVO.Destino = vpBO.Destino;

                return (iVPassagemDados.Insere(vpVO) == 1);
            }

            [DataObjectMethodAttribute(DataObjectMethodType.Update, true)]
            public bool Atualiza(VendaPassagemBO vpBO)
            {
                VPassagemVO vpVO = new VPassagemVO();
                vpVO.Id = vpBO.Id;
                vpVO.Cliente = vpBO.CBO.Cpf;
                vpVO.Preco = vpBO.Preco;
                vpVO.Companhia = vpBO.Companhia;
                vpVO.DataIda = vpBO.DataIda;
                vpVO.DataVolta = vpBO.DataVolta;
                vpVO.Classe = vpBO.Classe;
                vpVO.Usuario = vpBO.Usuario.Login;
                vpVO.Destino = vpBO.Destino;

                return (iVPassagemDados.Atualiza(vpVO) == 1);
            }

            [DataObjectMethodAttribute(DataObjectMethodType.Delete, true)]
            public bool Remove(int id)
            {
                return iVPassagemDados.Remove(id) == 1;
            }
        
            [DataObjectMethodAttribute(DataObjectMethodType.Select, false)]
            public VendaPassagemBO Consulta(int id)
            {
                VPassagemVO vpVO = iVPassagemDados.Consulta(id);
                VendaPassagemBO vpBO = new VendaPassagemBO();
                vpBO.Id = vpVO.Id;
                ClienteBOMetodos cBO = new ClienteBOMetodos();
                vpBO.CBO = cBO.Consulta(vpVO.Cliente);
                vpBO.Preco = vpVO.Preco;
                vpBO.Companhia = vpVO.Companhia;
                vpBO.DataIda = vpVO.DataIda;
                vpBO.DataVolta = vpVO.DataVolta;
                vpBO.Classe = vpVO.Classe;
                UsuarioBOMetodos uBO = new UsuarioBOMetodos();
                vpBO.Usuario = uBO.Consulta(vpVO.Usuario);
                vpBO.Destino = vpVO.Destino;

                return vpBO;
            }

            [DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
            public List<VendaPassagemBO> ConsultaTodos()
            {
                List<VendaPassagemBO> lVPassagemBO = new List<VendaPassagemBO>();
                List<VPassagemVO> lVPassagemVO = (new VPassagemSQLServer()).ConsultaTodos();
                foreach (VPassagemVO vpVO in lVPassagemVO)
                {
                    VendaPassagemBO vpBO = new VendaPassagemBO();
                    vpBO.Id = vpVO.Id;
                    ClienteBOMetodos cBO = new ClienteBOMetodos();
                    vpBO.CBO = cBO.Consulta(vpVO.Cliente);
                    vpBO.Preco = vpBO.Preco;
                    vpBO.Companhia = vpVO.Companhia;
                    vpBO.DataIda = vpVO.DataIda;
                    vpBO.DataVolta = vpVO.DataVolta;
                    vpBO.Classe = vpVO.Classe;
                    UsuarioBOMetodos uBO = new UsuarioBOMetodos();
                    vpBO.Usuario = uBO.Consulta(vpVO.Usuario);
                    vpBO.Destino = vpVO.Destino;

                    lVPassagemBO.Add(vpBO);
                }
                return lVPassagemBO;
            }

        }
    
}
